Multi-GPU systems have become prevalent in the industry. In general, multi-GPU systems may be used to accelerate processing of graphical applications.
One conventional system uses a multi-GPU system to accelerate processing of a single graphics application. For example, a display driver may be configured to redirect a 3D application programming interface (API) workload to the multi-GPU system in either per frame alternating pattern or intra-frame alternating pattern or a mixture of the two. In this case, different frames of the graphics application may be assigned to different GPUs to increase performance.
Unfortunately using a multi-GPU system to accelerate processing of a single graphical application according to the above conventional system consumes all available GPU resources of the multi-GPU system. As a result, no additional graphics application may utilize the resources of the multi-GPU during the time which the single graphical application is utilizing the multi-GPU system. Alternatively, running an additional graphical application simultaneously with the single graphical application may be allowed but will degrade the overall performance because the available resources of the multi-GPU system will be time shared between the multiple graphics applications.
Other conventional systems have been developed to utilize a multi-GPU system in order to accelerate processing of graphical applications. For example, a graphics application may use a special middleware graphical library to split up its command stream for transmission to an appropriate GPU of the multi-GPU system for processing.
Unfortunately, a graphics application that directs its command stream to a particular GPU needs to be aware of this GPU assignment and will fail to work retroactively for existing graphical applications that are otherwise unaware of any particular GPU assignment. For example, existing graphics applications have to be rewritten in order to take advantage of directing their command stream to an enumerated GPU. In other words, a rewrite and recompilation of a graphical application is required to leverage a multi-GPU system in order to improve performance of multiple graphical applications operating simultaneously in this convention method.